package ar.edu.untref.robotica.simulador;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;

import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.ListSelectionModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

import ar.edu.untref.robotica.control.ModuloDeControl;

@SuppressWarnings("serial")
public class Graficador extends JComponent implements ActionListener {

	private Escenario escenario;
	private ModuloDeControl controlador;
	private JFrame ventana;
	private Graphics2D graficador;
	private Set<Linea> recorrido;
	// una celda es...pixeles (del graficador, no de la imagen)
	private double relacionPixelCelda = 1;
	// UI
	
	private DefaultListModel modelo = new DefaultListModel();
	private JScrollPane scrollPaneLista;
	private JList lista_robots;
	private JButton botonEliminar;
	private JButton botonAgregar;
	private JPanel contentPane;
	private JScrollPane scrollPane;
	private JPanel panelControlador;
	private JPanel panelGraficador;
	private JLabel datoSensorF;
	private JLabel datoSensorD;
	private JLabel datoSensorI;
	private JLabel datoSensorT;
	private JLabel datoAngulo;
	private JLabel datoVelocidadIzquierda;
	private JLabel datoVelocidadDerecha;
	private JSpinner spinnerRD;
	private JSpinner spinnerRI;
	private JProgressBar barraRD;
	private JProgressBar barraRI;
	// Imagen
	private int ancho;
	private int alto;
	private double zoomStep = 0.1;
	private CopyOnWriteArrayList<ParEscenarioRobot> parEscenarioRobot;
	private Simulador simulador;
	
	
	public Graficador(CopyOnWriteArrayList<ParEscenarioRobot> parEscenarioRobot, Simulador simulador) {
		this.parEscenarioRobot = parEscenarioRobot;
		this.simulador = simulador;
		configurarVentana();
		this.recorrido = new HashSet<Linea>();
	}

	public void configurarVentana() {
		this.scrollPane = new JScrollPane();
		this.ancho = parEscenarioRobot.get(0).getEscenario().getImagen().getWidth(null);
		this.alto = parEscenarioRobot.get(0).getEscenario().getImagen().getHeight(null);
		this.ventana = new JFrame();
		this.ventana.setTitle("Simulador");
		this.ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.ventana.getContentPane().add(this);
		setupUI();
		setPreferredSize(new Dimension(this.ancho, this.alto));
		this.ventana.pack();
		this.ventana.setVisible(true);
	}

	private void setupUI() {
		String[] datos = {"robot 1"};
		
		this.lista_robots = new javax.swing.JList(datos);
		this.botonEliminar = new JButton("Eliminar robot");
		this.botonAgregar = new JButton("Agregar robot");
		this.contentPane = new JPanel();
		this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		this.contentPane.setLayout(new BorderLayout(0, 0));
		this.ventana.setContentPane(this.contentPane);
		this.panelGraficador = new JPanel();
		this.contentPane.add(this.panelGraficador, BorderLayout.CENTER);
		GridBagLayout gbl_panelGraficador = new GridBagLayout();
		gbl_panelGraficador.columnWidths = new int[] { 0, 0 };
		gbl_panelGraficador.rowHeights = new int[] { 0, 0 };
		gbl_panelGraficador.columnWeights = new double[] { 1.0,
				Double.MIN_VALUE };
		gbl_panelGraficador.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
		this.panelGraficador.setLayout(gbl_panelGraficador);
		this.scrollPane = new JScrollPane();
		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
		gbc_scrollPane.fill = GridBagConstraints.BOTH;
		gbc_scrollPane.gridx = 0;
		gbc_scrollPane.gridy = 0;
		this.panelGraficador.add(this.scrollPane, gbc_scrollPane);
		this.scrollPane.setViewportView(this);
		this.panelControlador = new JPanel();
		this.panelControlador.setBorder(new TitledBorder(new LineBorder(
				new Color(128, 128, 128), 2, true), "Datos Robot",
				TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0,
						128)));
		this.contentPane.add(this.panelControlador, BorderLayout.EAST);
		GridBagLayout gbl_panelControlador = new GridBagLayout();
		gbl_panelControlador.columnWidths = new int[] { 0, 118, 0 };
		gbl_panelControlador.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0, 0,
				0, 0, 0, 0 };
		gbl_panelControlador.columnWeights = new double[] { 0.0, 0.0,
				Double.MIN_VALUE };
		gbl_panelControlador.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0,
				0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, Double.MIN_VALUE };
		this.panelControlador.setLayout(gbl_panelControlador);
		JPanel panel_3 = new JPanel();
		GridBagConstraints gbc_panel_3 = new GridBagConstraints();
		gbc_panel_3.insets = new Insets(0, 0, 5, 5);
		gbc_panel_3.fill = GridBagConstraints.HORIZONTAL;
		gbc_panel_3.gridx = 0;
		gbc_panel_3.gridy = 0;
		this.panelControlador.add(panel_3, gbc_panel_3);
		JLabel lblRuedaDerecha = new JLabel("Rueda Derecha (Km/h)");
		lblRuedaDerecha.setForeground(new Color(0, 0, 255));
		lblRuedaDerecha.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblRuedaDerecha = new GridBagConstraints();
		gbc_lblRuedaDerecha.anchor = GridBagConstraints.WEST;
		gbc_lblRuedaDerecha.fill = GridBagConstraints.VERTICAL;
		gbc_lblRuedaDerecha.insets = new Insets(0, 0, 5, 5);
		gbc_lblRuedaDerecha.gridx = 0;
		gbc_lblRuedaDerecha.gridy = 1;
		this.panelControlador.add(lblRuedaDerecha, gbc_lblRuedaDerecha);
		this.barraRD = new JProgressBar();
		this.barraRD.setValue(50);
		GridBagConstraints gbc_barraRD = new GridBagConstraints();
		gbc_barraRD.fill = GridBagConstraints.BOTH;
		gbc_barraRD.insets = new Insets(0, 0, 5, 5);
		gbc_barraRD.gridx = 0;
		gbc_barraRD.gridy = 2;
		this.panelControlador.add(this.barraRD, gbc_barraRD);
		this.spinnerRD = new JSpinner();
		this.spinnerRD
				.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		this.spinnerRD.setModel(new SpinnerNumberModel(50, 0, 100, 1));
		this.spinnerRD.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_spinnerRD = new GridBagConstraints();
		gbc_spinnerRD.insets = new Insets(0, 0, 5, 0);
		gbc_spinnerRD.gridx = 1;
		gbc_spinnerRD.gridy = 2;
		this.panelControlador.add(this.spinnerRD, gbc_spinnerRD);
		JLabel lblRuedaIzquierda = new JLabel("Rueda Izquierda (Km/h)");
		lblRuedaIzquierda.setForeground(new Color(0, 0, 255));
		lblRuedaIzquierda
				.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblRuedaIzquierda = new GridBagConstraints();
		gbc_lblRuedaIzquierda.fill = GridBagConstraints.VERTICAL;
		gbc_lblRuedaIzquierda.anchor = GridBagConstraints.WEST;
		gbc_lblRuedaIzquierda.insets = new Insets(0, 0, 5, 5);
		gbc_lblRuedaIzquierda.gridx = 0;
		gbc_lblRuedaIzquierda.gridy = 3;
		this.panelControlador.add(lblRuedaIzquierda, gbc_lblRuedaIzquierda);
		this.barraRI = new JProgressBar();
		this.barraRI.setValue(50);
		GridBagConstraints gbc_barraRI = new GridBagConstraints();
		gbc_barraRI.fill = GridBagConstraints.BOTH;
		gbc_barraRI.insets = new Insets(0, 0, 5, 5);
		gbc_barraRI.gridx = 0;
		gbc_barraRI.gridy = 4;
		this.panelControlador.add(this.barraRI, gbc_barraRI);
		this.spinnerRI = new JSpinner();
		this.spinnerRI
				.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		this.spinnerRI.setModel(new SpinnerNumberModel(50, 0, 100, 1));
		this.spinnerRI.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_spinnerRI = new GridBagConstraints();
		gbc_spinnerRI.gridx = 1;
		gbc_spinnerRI.gridy = 4;
		this.panelControlador.add(this.spinnerRI, gbc_spinnerRI);
		JLabel lblSensorF = new JLabel("Sensor Frontal");
		lblSensorF.setForeground(new Color(0, 0, 255));
		lblSensorF.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblSensorF = new GridBagConstraints();
		gbc_lblSensorF.anchor = GridBagConstraints.WEST;
		gbc_lblSensorF.fill = GridBagConstraints.VERTICAL;
		gbc_lblSensorF.insets = new Insets(0, 0, 5, 5);
		gbc_lblSensorF.gridx = 0;
		gbc_lblSensorF.gridy = 5;
		this.panelControlador.add(lblSensorF, gbc_lblSensorF);
		this.datoSensorF = new JLabel("");
		this.datoSensorF
				.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoSensorF = new GridBagConstraints();
		gbc_datoSensorF.insets = new Insets(0, 0, 5, 0);
		gbc_datoSensorF.gridx = 1;
		gbc_datoSensorF.gridy = 5;
		this.panelControlador.add(this.datoSensorF, gbc_datoSensorF);
		JLabel lblSensorI = new JLabel("Sensor Izq");
		lblSensorI.setForeground(new Color(0, 0, 255));
		lblSensorI.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblSensorI = new GridBagConstraints();
		gbc_lblSensorI.anchor = GridBagConstraints.WEST;
		gbc_lblSensorI.fill = GridBagConstraints.VERTICAL;
		gbc_lblSensorI.insets = new Insets(0, 0, 5, 5);
		gbc_lblSensorI.gridx = 0;
		gbc_lblSensorI.gridy = 6;
		this.panelControlador.add(lblSensorI, gbc_lblSensorI);
		this.datoSensorI = new JLabel("");
		this.datoSensorI
				.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoSensorI = new GridBagConstraints();
		gbc_datoSensorI.insets = new Insets(0, 0, 5, 0);
		gbc_datoSensorI.gridx = 1;
		gbc_datoSensorI.gridy = 6;
		this.panelControlador.add(this.datoSensorI, gbc_datoSensorI);
		JLabel lblSensorD = new JLabel("Sensor Der");
		lblSensorD.setForeground(new Color(0, 0, 255));
		lblSensorD.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblSensorD = new GridBagConstraints();
		gbc_lblSensorD.anchor = GridBagConstraints.WEST;
		gbc_lblSensorD.fill = GridBagConstraints.VERTICAL;
		gbc_lblSensorD.insets = new Insets(0, 0, 5, 5);
		gbc_lblSensorD.gridx = 0;
		gbc_lblSensorD.gridy = 7;
		this.panelControlador.add(lblSensorD, gbc_lblSensorD);
		this.datoSensorD = new JLabel("");
		this.datoSensorD
				.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoSensorD = new GridBagConstraints();
		gbc_datoSensorD.insets = new Insets(0, 0, 5, 0);
		gbc_datoSensorD.gridx = 1;
		gbc_datoSensorD.gridy = 7;
		this.panelControlador.add(this.datoSensorD, gbc_datoSensorD);
		JLabel lblSensorT = new JLabel("Sensor Trasero");
		lblSensorT.setForeground(new Color(0, 0, 205));
		lblSensorT.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblSensorT = new GridBagConstraints();
		gbc_lblSensorT.anchor = GridBagConstraints.WEST;
		gbc_lblSensorT.fill = GridBagConstraints.VERTICAL;
		gbc_lblSensorT.insets = new Insets(0, 0, 5, 5);
		gbc_lblSensorT.gridx = 0;
		gbc_lblSensorT.gridy = 8;
		this.panelControlador.add(lblSensorT, gbc_lblSensorT);
		this.datoSensorT = new JLabel("");
		this.datoSensorT
				.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoSensorT = new GridBagConstraints();
		gbc_datoSensorT.insets = new Insets(0, 0, 5, 0);
		gbc_datoSensorT.gridx = 1;
		gbc_datoSensorT.gridy = 8;
		this.panelControlador.add(this.datoSensorT, gbc_datoSensorT);
		
		JLabel lblAngulo = new JLabel("Angulo");
		lblAngulo.setForeground(new Color(0, 0, 255));
		lblAngulo.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_lblAngulo = new GridBagConstraints();
		gbc_lblAngulo.anchor = GridBagConstraints.WEST;
		gbc_lblAngulo.fill = GridBagConstraints.VERTICAL;
		gbc_lblAngulo.insets = new Insets(0, 0, 5, 5);
		gbc_lblAngulo.gridx = 0;
		gbc_lblAngulo.gridy = 9;
		this.panelControlador.add(lblAngulo, gbc_lblAngulo);
		this.datoAngulo = new JLabel("");
		this.datoAngulo.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoAngulo = new GridBagConstraints();
		gbc_datoAngulo.insets = new Insets(0, 0, 5, 0);
		gbc_datoAngulo.gridx = 1;
		gbc_datoAngulo.gridy = 9;
		this.panelControlador.add(this.datoAngulo, gbc_datoAngulo);
		
		JLabel lblVelocidadIzquierda = new JLabel("Velocidad rueda izquierda");
		lblVelocidadIzquierda.setForeground(new Color(0, 0, 255));
		lblVelocidadIzquierda.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_VelocidadIzquierda = new GridBagConstraints();
		gbc_VelocidadIzquierda.anchor = GridBagConstraints.WEST;
		gbc_VelocidadIzquierda.fill = GridBagConstraints.VERTICAL;
		gbc_VelocidadIzquierda.insets = new Insets(0, 0, 5, 5);
		gbc_VelocidadIzquierda.gridx = 0;
		gbc_VelocidadIzquierda.gridy = 10;
		this.panelControlador.add(lblVelocidadIzquierda, gbc_VelocidadIzquierda);
		this.datoVelocidadIzquierda = new JLabel("");
		this.datoVelocidadIzquierda.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoVelocidadIzquierda = new GridBagConstraints();
		gbc_datoVelocidadIzquierda.insets = new Insets(0, 0, 5, 0);
		gbc_datoVelocidadIzquierda.gridx = 1;
		gbc_datoVelocidadIzquierda.gridy = 10;
		this.panelControlador.add(this.datoVelocidadIzquierda, gbc_datoVelocidadIzquierda);
		
		JLabel lblVelocidadDerecha = new JLabel("Velocidad rueda derecha");
		lblVelocidadDerecha.setForeground(new Color(0, 0, 255));
		lblVelocidadDerecha.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_VelocidadDerecha = new GridBagConstraints();
		gbc_VelocidadDerecha.anchor = GridBagConstraints.WEST;
		gbc_VelocidadDerecha.fill = GridBagConstraints.VERTICAL;
		gbc_VelocidadDerecha.insets = new Insets(0, 0, 5, 5);
		gbc_VelocidadDerecha.gridx = 0;
		gbc_VelocidadDerecha.gridy = 11;
		this.panelControlador.add(lblVelocidadDerecha, gbc_VelocidadDerecha);
		this.datoVelocidadDerecha = new JLabel("");
		this.datoVelocidadDerecha.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 14));
		GridBagConstraints gbc_datoVelocidadDerecha = new GridBagConstraints();
		gbc_datoVelocidadDerecha.insets = new Insets(0, 0, 5, 0);
		gbc_datoVelocidadDerecha.gridx = 1;
		gbc_datoVelocidadDerecha.gridy = 11;
		this.panelControlador.add(this.datoVelocidadDerecha, gbc_datoVelocidadDerecha);
		
		
		JPanel panel_4 = new JPanel();
		GridBagConstraints gbc_panel_4 = new GridBagConstraints();
		gbc_panel_4.insets = new Insets(0, 0, 0, 5);
		gbc_panel_4.fill = GridBagConstraints.BOTH;
		gbc_panel_4.gridx = 0;
		gbc_panel_4.gridy = 10;
		this.panelControlador.add(panel_4, gbc_panel_4);
		this.requestFocus();
		
		GridBagConstraints gbc_boton_1 = new GridBagConstraints();
		gbc_boton_1.gridx = 3;
		gbc_boton_1.gridy = 10;
		botonAgregar.addActionListener(this);
		this.panelControlador.add(botonAgregar, gbc_boton_1);
		

		GridBagConstraints gbc_boton_2 = new GridBagConstraints();
		gbc_boton_2.gridx = 3;
		gbc_boton_2.gridy = 11;
		botonEliminar.addActionListener(this);
		this.panelControlador.add(botonEliminar, gbc_boton_2);
		this.requestFocus();
		recuperarFoco();
		
		lista_robots.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		Dimension dimension = new Dimension(100, 150);
		lista_robots.setPreferredSize(dimension);
		modelo.addElement("robot 1");
		lista_robots.setModel(modelo);
		
		lista_robots.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent evt){
				lista_robotMouseClicked(evt);
			}
		});
		
		this.scrollPaneLista = new JScrollPane(lista_robots);
		this.scrollPane.setBounds(10, 30, 200, 100);
		
		GridBagConstraints gbc_lista = new GridBagConstraints();
		gbc_lista.gridx = 3;
		gbc_lista.gridy = 8;
		this.panelControlador.add(scrollPaneLista, gbc_lista);

	}

	public BigDecimal estadoRuedaDer(Robot robot) {

		Integer vS = (Integer) this.spinnerRD.getValue();
		Double valorSpinner = vS.doubleValue();
		BigDecimal vRuedaD = BigDecimal.valueOf(valorSpinner.doubleValue());
		return vRuedaD;
	}

	public BigDecimal estadoRuedaIzq(Robot robot) {

		Integer vS = (Integer) this.spinnerRI.getValue();
		Double valorSpinner = vS.doubleValue();
		BigDecimal vRuedaI = BigDecimal.valueOf(valorSpinner.doubleValue());
		return vRuedaI;
	}

	private void recuperarFoco() {

		addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {

			}

			@Override
			public void mousePressed(MouseEvent e) {

			}

			@Override
			public void mouseExited(MouseEvent e) {

			}

			@Override
			public void mouseEntered(MouseEvent e) {

			}

			@Override
			public void mouseClicked(MouseEvent e) {

				if (!Graficador.this.panelControlador.contains(e.getPoint())
						|| Graficador.this.panelGraficador.contains(e
								.getPoint())) {
					requestFocusInWindow();
				}
			}
		});
	}

	@Override
	public void paint(Graphics graficador) {

		this.graficador = (Graphics2D) graficador;
		AffineTransform escala = new AffineTransform();
		escala.scale(this.relacionPixelCelda, this.relacionPixelCelda);
		this.graficador.transform(escala);
		dibujarImagen();
		dibujarRobot();
		djbujarRecorrido();
	}

	private void djbujarRecorrido() {

		for (ParEscenarioRobot cadaParEscenarioRobot : this.parEscenarioRobot) {
			Point posicion = new Point((int) cadaParEscenarioRobot.getEscenario().getPosicionRobot()
					.getPosicionX(), (int)  cadaParEscenarioRobot.getEscenario().getPosicionRobot()
					.getPosicionY());
			this.recorrido.add(new Linea(posicion, posicion));
			this.graficador.setPaint(Color.red);
			for (Line2D.Double cadaLinea : this.recorrido) {
				this.graficador.draw(cadaLinea);
			}
			
		}
	}

	private void dibujarImagen() {
		for (ParEscenarioRobot cadaParEscenarioRobot : this.parEscenarioRobot) {
			Image imagen = cadaParEscenarioRobot.getEscenario().getImagen();
			this.graficador.drawImage(imagen, 0, 0, null);
		}
	}

	public void dibujarRobot() {
		for (ParEscenarioRobot cadaParEscenarioRobot : this.parEscenarioRobot) {
			this.graficador.setPaint(Color.blue);
			this.graficador.fill(cadaParEscenarioRobot.getEscenario().getShapeRobot());
			this.graficador.setPaint(Color.cyan);
			this.graficador.fill(cadaParEscenarioRobot.getEscenario().getIndicacionRobot());
		}
		
	}

	public void aumentarZoom() {

		this.relacionPixelCelda = this.relacionPixelCelda + this.zoomStep;
		setPreferredSize(new Dimension(
				(int) (this.ancho * this.relacionPixelCelda),
				(int) (this.alto * this.relacionPixelCelda)));
		this.scrollPane.getViewport().revalidate();
	}

	public void disminuirZoom() {

		this.relacionPixelCelda = this.relacionPixelCelda - this.zoomStep;
		setPreferredSize(new Dimension(
				(int) (this.ancho * this.relacionPixelCelda),
				(int) (this.alto * this.relacionPixelCelda)));
		this.scrollPane.getViewport().revalidate();
	}

	public void sensar(Robot robot, Escenario escenario) {

		Double valorFrontal = robot
				.getDistanciaObstaculoAdelante(escenario);
		Double valorIzq = robot
				.getDistanciaObstaculo45Izquierda(escenario);
		Double valorDer = robot.getDistanciaObstaculo45Derecha(escenario);
		Double valorTrasero = robot.getDistanciaObstaculoAtras(escenario);
		Double valorAngulo = escenario.getPosicionRobot().getAngulo();
		Float vF = valorFrontal.floatValue();
		Float vI = valorIzq.floatValue();
		Float vD = valorDer.floatValue();
		Float vT = valorTrasero.floatValue();
		Integer vA = valorAngulo.intValue();
		BigDecimal vRI = robot.getRuedaI().getVelocidad();
		BigDecimal vRD = robot.getRuedaD().getVelocidad();
		this.datoSensorF.setText(vF.toString());
		this.datoSensorI.setText(vI.toString());
		this.datoSensorD.setText(vD.toString());
		this.datoSensorT.setText(vT.toString());
		this.datoAngulo.setText(vA.toString());
		this.datoVelocidadIzquierda.setText(Float.toString(vRI.floatValue()));
		this.datoVelocidadDerecha.setText(Float.toString(vRD.floatValue()));
	}

	
	public String[] datosRelevantesAGuardar(){
		
		String[] datos = new String[9];
		datos[0] = this.datoAngulo.getText();
		datos[1] = this.datoVelocidadDerecha.getText();
		datos[2] = this.datoVelocidadIzquierda.getText();
		datos[3] = this.datoSensorF.getText();
		datos[4] = this.datoSensorI.getText();
		datos[5] = this.datoSensorD.getText();
		datos[6] = this.datoSensorT.getText();
		datos[7] = Double.toString(this.escenario.getPosicionRobot().getPosicionY());
		datos[8] = Double.toString(this.escenario.getPosicionRobot().getPosicionX());
		
		return datos;
	}
	
	public JSpinner getSpinnerD() {

		return this.spinnerRD;
	}
	
	public void actionPerformed(ActionEvent e){
		if(e.getSource() == botonAgregar){
			String item = "robot "+(this.modelo.size()+1);
			
			try {
				Image imagen = ImageIO.read(new File(Configuracion.instancia()
						.getRutaDelMapa()));
		
			Escenario nuevoEscenario = new Escenario(imagen, new Posicion(50.0,50.0, 180.0));
			ParEscenarioRobot nuevo = new ParEscenarioRobot(nuevoEscenario, null, this.parEscenarioRobot.size()+1);
			nuevo.setRobot(new Robot(Configuracion.instancia().getAltoRobot(),
					Configuracion.instancia().getAnchoRobot()));
			
			this.parEscenarioRobot.add(nuevo);
			modelo.addElement(item);
			
			this.dibujarRobot();
			this.dibujarImagen();
			JOptionPane.showMessageDialog(this, "Se ha agregado otro robot");
			
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

			
		}
		if(e.getSource() == botonEliminar){
			System.out.println("elimina");
//			int index = lista_robots.getSelectedIndex();
			if(modelo.size() > 1){
				modelo.removeElementAt(modelo.size()-1);
				this.parEscenarioRobot.remove(modelo.size()-1);	
				JOptionPane.showMessageDialog(this, "Se elimino el robot "+(modelo.size()));
				this.simulador.setRobotAControl(modelo.size()-1);
				
			}
			//else{
//				
//				JOptionPane.showMessageDialog(this, "Debe seleccionar un robot de la lista");
//				
//			}
		}
		
	}

	public JSpinner getSpinnerI() {

		return this.spinnerRI;
	}

	public JProgressBar getBarraDer() {

		return this.barraRD;
	}

	public JProgressBar getBarraIzq() {

		return this.barraRI;
	}
	
	private void lista_robotMouseClicked(MouseEvent evt){
		int index = lista_robots.getSelectedIndex();
		
		if(index >= 0){
			this.simulador.setRobotAControl(index);
		}
		
	}
}
